//给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。 
//
// 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [10,2]
//输出："210" 
//
// 示例 2： 
//
// 
//输入：nums = [3,30,34,5,9]
//输出："9534330"
// 
//
// 示例 3： 
//
// 
//输入：nums = [1]
//输出："1"
// 
//
// 示例 4： 
//
// 
//输入：nums = [10]
//输出："10"
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 100 
// 0 <= nums[i] <= 109 
// 
// Related Topics 贪心 字符串 排序 
// 👍 736 👎 0

/**
 * @author DaHuangXiao
 */
package leetcode.editor.cn;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;

public class LargestNumber {
    public static void main(String[] args) {
        Solution solution = new LargestNumber().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String largestNumber(int[] nums) {
        String[] ss = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            ss[i]=nums[i]+"";
        }
        Arrays.sort(ss, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                String ab = a+b;
                String ba = b+a;
                return ba.compareTo(ab);
            }
        });

        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < ss.length; i++) {
            stringBuilder.append(ss[i]);
        }
        int len = stringBuilder.length();
        int k = 0;
        while (k < len - 1 && stringBuilder.charAt(k) == '0') k++;
        return stringBuilder.substring(k);

    }
}
//leetcode submit region end(Prohibit modification and deletion)

}